package controller;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

import dao.CompraDao;
import dao.CompraDaoImplementation;
import dao.ItemCompraDao;
import dao.ItemCompraDaoImplementation;
import dao.ItemParcelaCompraDao;
import dao.ItemParcelaCompraDaoImplementation;
import dao.ProdutoDao;
import dao.ProdutoDaoImplementation;
import entity.Compra;
import entity.ItemCompra;
import entity.ItemParcelaCompra;
import entity.Produto;

public class CompraController {
			
		public void salvarCompra(Compra compra)
		{
			CompraDao dao = new CompraDaoImplementation();
			ProdutoDao produtoDao = new ProdutoDaoImplementation();
			dao.save(compra);
			
			List<ItemCompra> listaItemCompra = new ItemCompraDaoImplementation().list();
			
			ItemCompraDao daoItemCompra = new ItemCompraDaoImplementation();
			
			for (ItemCompra itemCompraNull: listaItemCompra)
			{
				if(itemCompraNull.getCompra() == null)
				{
					itemCompraNull.setCompra(new Compra());
					itemCompraNull.setCompra(compra);
					daoItemCompra.update(itemCompraNull);
					
					Produto produto = produtoDao.getProduto(itemCompraNull.getProduto().getIdProduto());
					
					if ( produto != null ){

						if(produto.getValorUnitario() == null || produto.getValorUnitario().longValue() == 0 ){
							produto.setValorUnitario(itemCompraNull.getCustoUnitario());
						}else{
							
							Long qtdAtual = Long.valueOf(produto.getEstoque());
							Long qtdNova = Long.valueOf(itemCompraNull.getQuantidade());
							Long valorAtual = (produto.getValorUnitario().longValue());
							Long valorNovo = (itemCompraNull.getCustoUnitario().longValue());
							
							produto.setValorUnitario( new BigDecimal((((qtdAtual*valorAtual) + (qtdNova*valorNovo)) / (qtdAtual+qtdNova))) );
						}
						
						Integer novoEstoque = Integer.parseInt(produto.getEstoque()) + itemCompraNull.getQuantidade();
						produto.setEstoque(novoEstoque.toString());
						
						produtoDao.update(produto);
					}
					
				}
			}
			
			List<ItemParcelaCompra> listaItemParcelaCompra = new ItemParcelaCompraDaoImplementation().listItemParcelaCompraNull();
			
			ItemParcelaCompraDao daoItemParcelaCompra = new ItemParcelaCompraDaoImplementation();
			
			for (ItemParcelaCompra listaItemParcelaCompraNull: listaItemParcelaCompra)
			{
				if(listaItemParcelaCompraNull.getCompra() == null)
				{
					listaItemParcelaCompraNull.setCompra(new Compra());
					listaItemParcelaCompraNull.setCompra(compra);
					daoItemParcelaCompra.update(listaItemParcelaCompraNull);
				}
			}
		}
		
		public void editarCompra(Compra compra)
		{
			CompraDao dao = new CompraDaoImplementation();
			dao.update(compra);
		}
		
		public void excluirCompra(Compra compra)
		{
			CompraDao dao = new CompraDaoImplementation();
			dao.delete(compra);
		}
		
		public void consultarCompra(Compra compra)
		{
			CompraDao dao = new CompraDaoImplementation();
			dao.consult(compra);
		}
		
		public Compra getCompraById(long idCompra){
			CompraDao dao = new CompraDaoImplementation();
			return dao.getCompra(idCompra);
			}

			public List<Compra> listarCompra() 
			{
			List<Compra> listaCompra = new CompraDaoImplementation().list();

			listaCompra = new ArrayList<Compra>(listaCompra);

			return listaCompra;
			}
}


